賦值運算子(Assignment operator) : 指的是同時執行「算數運算子或位元運算子」以及「指定運算子」兩件工作。(指定運算子即是"=
")
C 語言支持的賦值運算子:
運算子 | 說明 |
---|---|
= |
把右邊運算元的值賦給左邊運算元 |
+= |
加且賦值運算子,把左邊運算元加上右邊運算元的結果賦值給左邊運算元 |
-= |
減且賦值運算子,把左邊運算元減去右邊運算元的結果賦值給左邊運算元 |
*= |
乘且賦值運算子,把左邊運算元乘以右邊運算元的結果賦值給左邊運算元 |
/= |
除且賦值運算子,把左邊運算元除以右邊運算元的結果賦值給左邊運算元 |
%= |
取餘數且賦值運算子,求兩個運算元的餘數值賦值給左邊運算元 |
<<= |
左移且賦值運算子 |
>>= |
右移且賦值運算子 |
&= |
做完 & 的位元運算的值賦值給左邊運算元 |
` | =` |
^= |
做完 ^ 的位元運算的值賦值給左邊運算元 |
以上表格參考
ITREAD01.COM - C運算子
老樣子,我們上程式碼!!
#include<stdio.h>
int main(){
int A = 0;
A += 2; //A = A + 2
printf("A = %d\n", A);
A <<= 2; //A = A << 2
printf("A = %d", A);
return 0;
}
下面為輸出結果:
程式碼裡面的"A += 2
"就是等於A = A + 2
的意思,所以第一次輸出 A 會等於 2,而A <<= 2
是等於A = A << 2
的意思,所以現在 A=2=0010,往左移兩次,得到 1000,也就是 8!
還記得小時候剛學會四則運算,老師總告訴我們"先乘除後加減"嗎?
在 C 的世界裡,運算子的計算也是有順序的!
常見運算子的優先順序:
順序 | 運算子 |
---|---|
1 | ( )小括號 |
2 | +(正數)、-(負數) |
3 | (1) * (2) / (3) % |
4 | (1) + (2) - |
5 | (1) < (2) <= (3) > (4) >= |
6 | (1) = (2) != |
7 | && |
8 | || |
9 | (1) =(assign) (2) *=、/=、%=、+=、-= |
為了讓大家更了解,這裡有幾個小問題 :
#include<stdio.h>
int main(){
int A = 0;
printf("%d\n", 50 * (++A) / 5 + 2 % 1);
printf("A = %d", A);
return 0;
}
請問以上程式碼輸出是甚麼呢?
以下是輸出結果:
上面的程式碼,會先做++A
,所以 A=1,然後做(50*1 / 5
)+(2 % 1
),因為 2 除以 1 的餘數為 0,所以我們只要計算(50*1/5
)就好,所以答案等於 10 ~ 你答對了嗎~我們再看一題!
#include<stdio.h>
int main(){
int A = 0;
printf("%d\n", (A++) * 999 * 9 + 100 / 2);
++A *= 10 + 5;
printf("A=%d",A);
return 0;
}
一樣是問上面程式碼的輸出~請思考一下!
思考完,我們就來看結果!
這題有小小的陷阱,看(A++)*999*9 + 100/2
會覺得數字怎麼那麼醜,但是(A++
)代表了先計算完,A 才會加 1,所以會等於0*999*9+100/2
,這樣就會等於 50!
然後,++A *= 10 + 5;
的部分是 A 先加 1,會等於 2,然後計算A=A*(10+5)
,所以最後的結果,A 會等於 30!
好了,我們運算子這個單元已經告一段落了~明天我們來講講 C 的條件判斷吧!!!